home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d6 / glazer.arc / MNTHINCM.BAS < prev    next >
BASIC Source File  |  1988-10-07  |  3KB  |  69 lines

  1. 100 ' Monthly income ("MNTHINCM")
  2. 110 CLS
  3. 120 COLOR 0,15 : PRINT "Monthly Income" : COLOR 15,0
  4. 130 DEFDBL A-Z
  5. 140 DEFINT M-N
  6. 150 'Define rounding function
  7. 160 DEF FNR (V) = SGN (V) * INT (ABS (V) * 100 + .5) / 100
  8. 170 MONEYFMT$ = "$$##,###,###.##"
  9. 180 '     Let user select results
  10. 190 PRINT : PRINT "Select desired result:"
  11. 200 PRINT
  12. 210 PRINT "1 - Initial deposit"
  13. 220 PRINT "2 - Required interest rate"
  14. 230 PRINT "3 - Monthly income"
  15. 240 PRINT "4 - Number of monthly withdrawals"
  16. 250 PRINT
  17. 260 INPUT "Result Number";  RESULT
  18. 270 IF RESULT < 1 OR RESULT > 4  THEN PRINT "Select 1-4 only" : GOTO 200
  19. 280 PRINT
  20. 290 '     Let user enter data
  21. 300 PRINT "Do not enter dollar signs or commas"
  22. 310 PRINT
  23. 320 IF RESULT <> 1  THEN INPUT "Initial deposit: ", PV
  24. 330 IF RESULT <> 2  THEN INPUT "Annual interest rate (in percent): ", AR
  25. 340 IF RESULT <> 3  THEN INPUT "Monthly income: ", INCOME
  26. 350 IF RESULT <> 4  THEN INPUT "Term (in months): ", NMONTHS
  27. 360 INPUT "Annual inflation rate (in percent): ", INFLATION
  28. 370 INPUT "Marginal tax rate (in percent): ", TAXRATE
  29. 380 '     Initialize values
  30. 390 PR = (1 + AR / 100) ^ (1 / 12) - 1  'Monthly interest rate
  31. 400 PR = PR * (1 - TAXRATE / 100)       'After - tax interest rate
  32. 410 'Monthly inflation rate
  33. 420 INFLATION = (1 + INFLATION / 100) ^ (1 / 12) - 1
  34. 430 'Effective interest rate
  35. 440 REFFECTIVE = (1 + PR) / (1 + INFLATION) - 1
  36. 450 PRINT
  37. 460 ON RESULT GOTO 480, 530, 670, 720
  38. 470 '     Result 1: Initial deposit
  39. 480 IF REFFECTIVE < > 0  THEN PV = INCOME * (1 + REFFECTIVE) / REFFECTIVE                                     * (1 - (1 + REFFECTIVE) ^ - NMONTHS)                                       ELSE PV = INCOME * NMONTHS
  40. 490 PRINT "Initial deposit: "; USING MONEYFMT$; PV
  41. 500 END
  42. 510 '     Result 2: Required interest rate
  43. 520 'Use bisection method
  44. 530 RLOWER = 0
  45. 540 RUPPER = .5
  46. 550 WHILE (RUPPER - RLOWER) > .00001
  47. 560   TRIALR = (RUPPER + RLOWER) / 2
  48. 570   REFFECTIVE = TRIALR * (1 - TAXRATE / 100)
  49. 580   REFFECTIVE = (1 + REFFECTIVE) / (1 + INFLATION) - 1
  50. 590   TRIALPMT = PV * REFFECTIVE / ( (1 + REFFECTIVE) * (1 - (1 + REFFECTIVE)                    ^ -NMONTHS) )
  51. 600   IF TRIALPMT > INCOME  THEN RUPPER = TRIALR  ELSE RLOWER = TRIALR
  52. 610 WEND
  53. 620 AR = (1 + (RUPPER + RLOWER) / 2) ^ 12 - 1
  54. 630 AR = AR * 100
  55. 640 PRINT "Required interest rate: "; FNR(AR); "%"
  56. 650 END
  57. 660 '     Result 3: Monthly income
  58. 670 IF REFFECTIVE <> 0  THEN INCOME = PV * REFFECTIVE / ((1 + REFFECTIVE) *                                  (1 - (1 + REFFECTIVE) ^ -NMONTHS) )                                        ELSE INCOME = PV / NMONTHS
  59. 680 PRINT
  60. 690 PRINT "Monthly income : "; USING MONEYFMT$; INCOME
  61. 700 END
  62. 710 '     Result 4: Number of withdrawals
  63. 720 IF REFFECTIVE <> 0  THEN TMONTHS = INCOME / REFFECTIVE + 1
  64. 730 IF REFFECTIVE <> 0  THEN TMONTHS = LOG (TMONTHS / (TMONTHS - PV) )                  / LOG (1 + REFFECTIVE)
  65. 740 IF REFFECTIVE = 0  THEN TMONTHS = PV / INCOME
  66. 750 IF (INT(TMONTHS) + 1 - TMONTHS) < .01  THEN NMONTHS = INT(TMONTHS) + 1                                                 ELSE NMONTHS = INT(TMONTHS)
  67. 760 PRINT "Number of monthly withdrawals: "; NMONTHS
  68. 770 END
  69.